package com.okami.designpatterns.factory.factorymethod;

import com.okami.designpatterns.factory.NoProductException;
import com.okami.designpatterns.factory.Shape;

/**
 * 工厂方法模式：这不是一个工厂类，是不过普通类中定义了用于创建对象的工厂方法，且是抽象的，例如Collection的iterator();
 * 将创建对象的抽象方法抽象到子类实现
 * 比如Integer类，valueOf()方法就是一个工厂方法
 * @author 谭景玉
 */
interface ShapeStore {
    default Shape getInstance(String shapeStr) throws NoProductException {
        Shape shape = craeteShape(shapeStr);
        // 生产完想要的产品以后，可以进一步操作
        // 每个不同shape的shagnse方法都不同
        // shape.shangse.....();

        return shape;
    }

    Shape craeteShape(String shapeStr) throws NoProductException;
}
